package com.dongdongshop.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.dongdongshop.data.Result;
import com.dongdongshop.pojo.TbGoods;
import com.dongdongshop.pojo.TbGoodsDesc;
import com.dongdongshop.pojo.TbItem;
import com.dongdongshop.pojo.TbSeller;
import com.dongdongshop.service.GoodsService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.List;

@Controller
@RequestMapping("goods")
public class GoodsController {

    @DubboReference
    private GoodsService goodsService;

    @RequestMapping("insertInfo")
    @ResponseBody
    public Result insertInfo(TbGoods goods, TbGoodsDesc goodsDesc, TbItem tbItem){
//       String SellerId = (String)request.getSession().getAttribute("SellerId");

        //获取当前登录的用户
       TbSeller tbSeller = (TbSeller) SecurityUtils.getSubject().getPrincipal();
       goods.setSellerId(tbSeller.getSellerId());
       tbItem.setSellerId(tbSeller.getSellerId());
       goodsService.insertInfo(goods,goodsDesc,tbItem);
       return Result.ok();
    }

    @RequestMapping("upload")
    @ResponseBody
    public Result insertInfo(@RequestParam("image") MultipartFile image){
        //传统写法：
        // 1. 获取一个路径用来存放图片位置
        // 2. 调用MultipartFile输出功能将图片以io流的方式输出到文件夹里
        // 3. 并且返回图片名称即可（详情可见news项目中的上传方法）

        //现在：
        //改用第三方调用方式上传图片，将图片放到阿里云上，而不是放到我们指定的文件夹里（因为我们调用文件夹io流性能非常差
        /*
            调用第三方接口：有两种方式
            第一种是 SDK 方式（导jar包调用方法）
            第二种是：API 方式（不需要导jar包，看接口文档，使用http方式调用（都需要掌握）
            这里是讲的第一种方法
         */

        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String https = "https://";
        String endpoint = "oss-cn-beijing.aliyuncs.com";

        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tNsWhDy41FeVhm8fudw";
        String accessKeySecret = "GGhLSQqcpheEfF0pk4t9GiP0833TtZ";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(https + endpoint, accessKeyId, accessKeySecret);

        // 创建PutObjectRequest对象。
        // 依次填写Bucket名称（例如examplebucket）和Object完整路径（例如exampledir/exampleobject.txt）。Object完整路径中不能包含Bucket名称。
        PutObjectRequest putObjectRequest = null;
        //图片名
        String imagePath = "image/" + image.getOriginalFilename();
        //Bucket名称
        String bucket = "2107lcc";
        try {
            putObjectRequest = new PutObjectRequest(bucket,imagePath, image.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        };

        // 上传字符串。
        ossClient.putObject(putObjectRequest);

        // 关闭OSSClient。
        ossClient.shutdown();

        //https://2107lcc.oss-cn-beijing.aliyuncs.com/image/0bd2697e-2ef1-472d-973d-0fe3be7d3051.JPG
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(https).append(bucket).append(".").append(endpoint).append("/").append(imagePath);
        System.out.println(stringBuilder.toString());
        return Result.ok().setData(stringBuilder.toString());
    }
}
